package controller.gerenciadores;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

public class GerenciadorDeLog {

	private static GerenciadorDeLog instance;
	private File arquivoDeLog;
	private FileWriter writer;
	private PrintWriter printer;
	private Date dataLog;
	private SimpleDateFormat formatadorData;
	private final String CAMPO_DATA;
	private final String CAMPO_REGISTRO;
	private final String ESPACO;

	public GerenciadorDeLog() {
		CAMPO_DATA = "Data: ";
		CAMPO_REGISTRO = "Registro: ";
		ESPACO = "\t";
		formatadorData = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
	}

	public static GerenciadorDeLog getInstance() {

		if (instance == null) {
			instance = new GerenciadorDeLog();
		}
		return instance;
	}

	public void inserirRegistroLog(String registro) throws IOException {
		abrirArquivoGravacao();

		dataLog = new Date();
		String dataFormatada = formatadorData.format(dataLog);
		printer.print(CAMPO_DATA);
		printer.print(dataFormatada);

		printer.print(ESPACO);
		printer.print(CAMPO_REGISTRO);
		printer.print(FormataRegistro(registro));
		printer.println();

		fecharArquivoGravacao();

	}

	private void abrirArquivoGravacao() throws IOException {
		arquivoDeLog = new File("C:/AApolo/ArquivoDeLog.log");
		writer = new FileWriter(arquivoDeLog, true);
		printer = new PrintWriter(writer);

	}

	private void fecharArquivoGravacao() throws IOException {
		printer.close();
		writer.close();

	}

	private String FormataRegistro(String registro) {
		String registroFormatado = registro.replaceAll("\n", " ").trim();

		return registroFormatado;

	}
}
